#include <iostream>
#include <string>

using namespace std;

//class A 
//{ 
//public: 
//	void test(float a) 
//	{
//		cout << a; 
//	} 
//}; 
//
//class B :public A 
//{ 
//public: 
//	void test(int b) 
//	{ 
//		cout << b; 
//	} 
//}; 
//
//void main() 
//{ 
//	A* a = new A;
//	B* b = new B; 
//	a = b; 
//	a->test(1.1); 
//}

//class A
//{
//public:
//	virtual void f()
//	{
//		cout << "A::f()" << endl;
//	}
//};
//
//class B : public A
//{
//private:
//	virtual void f()
//	{
//		cout << "B::f()" << endl;
//	}
//};
//
//int main()
//{
//	A* pa = (A*)new B;
//	pa->f();
//
//	return 0;
//}

class A
{
public:
	A() :m_iVal(0) { test(); }
	virtual void func() { std::cout << m_iVal << ' '; }
	void test() { func(); }
public:
	int m_iVal;
};

class B : public A
{
public:
	B() { test(); }
	virtual void func()
	{
		++m_iVal;
		std::cout << m_iVal << ' ';
	}
};

int main(int argc, char* argv[])
{
	A* p = new B;
	p->test();

	return 0;
}